package com.apigen.platform.mapper;

import com.apigen.platform.entity.GenTableField;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * 表字段管理 Mapper 接口
 *
 * @author API Generator
 * @since 2024-09-24
 */
@Mapper
public interface GenTableFieldMapper extends BaseMapper<GenTableField> {

    /**
     * 根据表ID查询字段列表
     *
     * @param tableId 表ID
     * @return 字段列表
     */
    List<GenTableField> selectFieldsByTableId(@Param("tableId") Long tableId);

    /**
     * 根据表ID和字段名查询字段
     *
     * @param tableId 表ID
     * @param fieldName 字段名
     * @return 字段信息
     */
    GenTableField selectByTableIdAndFieldName(@Param("tableId") Long tableId, @Param("fieldName") String fieldName);

    /**
     * 根据表ID查询主键字段
     *
     * @param tableId 表ID
     * @return 主键字段列表
     */
    List<GenTableField> selectPrimaryKeysByTableId(@Param("tableId") Long tableId);

    /**
     * 根据表ID查询自增字段
     *
     * @param tableId 表ID
     * @return 自增字段
     */
    GenTableField selectAutoIncrementFieldByTableId(@Param("tableId") Long tableId);

    /**
     * 根据表ID查询唯一字段
     *
     * @param tableId 表ID
     * @return 唯一字段列表
     */
    List<GenTableField> selectUniqueFieldsByTableId(@Param("tableId") Long tableId);

    /**
     * 根据表ID统计字段数量
     *
     * @param tableId 表ID
     * @return 字段数量
     */
    int countFieldsByTableId(@Param("tableId") Long tableId);

    /**
     * 检查字段名是否存在
     *
     * @param tableId 表ID
     * @param fieldName 字段名
     * @param excludeId 排除的字段ID
     * @return 是否存在
     */
    boolean existsFieldName(@Param("tableId") Long tableId, 
                           @Param("fieldName") String fieldName, 
                           @Param("excludeId") Long excludeId);

    /**
     * 根据表ID删除所有字段
     *
     * @param tableId 表ID
     * @return 删除数量
     */
    int deleteByTableId(@Param("tableId") Long tableId);

    /**
     * 批量插入字段
     *
     * @param fields 字段列表
     * @return 插入数量
     */
    int batchInsert(@Param("fields") List<GenTableField> fields);
}
